Fix gtk_grid_attach_next_to
authorMatthias Clasen <mclasen@redhat.com>
Wed, 26 Oct 2011 03:18:21 +0000 (23:18 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 26 Oct 2011 03:21:13 +0000 (23:21 -0400)
The function did not behave as intended when @sibling is NULL.
Also add an example to the docs to clarify the intended behaviour.

gtk/gtkgrid.c

index 5ef4a6f79489b078070c1d22c51912807e595627..da66a22e63c1ef2f058d09322c08aedd2d9614c3 100644 (file)
@@ -1470,6 +1470,9 @@ gtk_grid_attach (GtkGrid   *grid,
  * @side. When @sibling is %NULL, the widget is placed in row (for
  * left or right placement) or column 0 (for top or bottom placement),
  * at the end indicated by @side.
+ *
+ * Attaching widgets labeled [1], [2], [3] with @sibling == %NULL and
+ * @side == %GTK_POS_LEFT yields a layout of [3][2][1].
  */
 void
 gtk_grid_attach_next_to (GtkGrid         *grid,
@@ -1520,20 +1523,22 @@ gtk_grid_attach_next_to (GtkGrid         *grid,
       switch (side)
         {
         case GTK_POS_LEFT:
-          left = find_attach_position (grid, GTK_ORIENTATION_HORIZONTAL, 0, height, TRUE);
+          left = find_attach_position (grid, GTK_ORIENTATION_HORIZONTAL, 0, height, FALSE);
+          left -= width;
           top = 0;
           break;
         case GTK_POS_RIGHT:
-          left = find_attach_position (grid, GTK_ORIENTATION_HORIZONTAL, 0, height, FALSE);
+          left = find_attach_position (grid, GTK_ORIENTATION_HORIZONTAL, 0, height, TRUE);
           top = 0;
           break;
         case GTK_POS_TOP:
           left = 0;
-          top = find_attach_position (grid, GTK_ORIENTATION_VERTICAL, 0, width, TRUE);
+          top = find_attach_position (grid, GTK_ORIENTATION_VERTICAL, 0, width, FALSE);
+          top -= height;
           break;
         case GTK_POS_BOTTOM:
           left = 0;
-          top = find_attach_position (grid, GTK_ORIENTATION_VERTICAL, 0, width, FALSE);
+          top = find_attach_position (grid, GTK_ORIENTATION_VERTICAL, 0, width, TRUE);
           break;
         default:
           g_assert_not_reached ();